﻿// 智能业务管理模块数据
var userData = [
    {
        "用户名": "孕某",
        "职位": "专利审查员",
        "部门": "医学工程室",
        "当前状态": "孕中期 (24周)",
        "预产期": "2025年3月15日",
        "怀孕开始": "2025年1月20日",
        "一通建议数": "18",
        "一通已完成": "12",
        "一通待完成": "6",
        "结案建议数": "12",
        "结案已完成": "10",
        "结案待完成": "4"
    }
];

/******** 月度规划兜底数据 ********/
const DEFAULT_PLAN = [
  { month: 1,  weeks: '1-4周',   first: 20, close: 18 },
  { month: 2,  weeks: '5-8周',   first: 22, close: 20 },
  { month: 3,  weeks: '9-12周',  first: 23, close: 21 },
  { month: 4,  weeks: '13-16周', first: 20, close: 18 },
  { month: 5,  weeks: '17-20周', first: 19, close: 17 },
  { month: 6,  weeks: '21-24周', first: 18, close: 16 },
  { month: 7,  weeks: '25-27周', first: 17, close: 15 },
  { month: 8,  weeks: '28-31周', first: 14, close: 12 },
  { month: 9,  weeks: '32-35周', first: 12, close: 10 },
  { month: 10, weeks: '36-40周', first: 10, close: 8  },
  { month: 11, weeks: '产假1月', first: 0,  close: 0  },
  { month: 12, weeks: '产后1月', first: 8,  close: 6  },
  { month: 13, weeks: '产后2月', first: 10, close: 8  },
  { month: 14, weeks: '产后3月', first: 12, close: 10  },
  { month: 15, weeks: '产后4月', first: 13, close: 11 },
  { month: 16, weeks: '产后5月',first: 14, close: 12 }
];

/******** 孕期阶段配置 *********/
const PREG_STAGES = [
  { key: '孕早期',  weeks: '(1-12周)',  task: '每月建议处理 22-28 件，避免剧烈反应期过度加班' },
  { key: '孕中期',  weeks: '(13-27周)', task: '每月建议处理 14-22 件，进入稳定高产期' },
  { key: '孕晚期',  weeks: '(28-40周)', task: '每月建议处理 8-15 件，逐步减负' },
  { key: '产假',    weeks: '',      task: '视审限情况处理中通案件，可选进入互助池或由同事协助处理' },
  { key: '产后返岗', weeks: '',      task: '首月建议 8-10 件，逐步恢复节奏' }
];

/******** 案源推送兜底数据 ********/
const DEFAULT_CASES = [
  {
    案源编号: '202410123456.7',
    技术领域: '计算机软件',
    预估难度: '中等',
    标签: '本领域|复杂度适中',
    状态: '已锁定'
  },
  {
    案源编号: '202410234567.8',
    技术领域: '通信技术',
    预估难度: '简单',
    标签: '相关领域|快速处理',
    状态: '已锁定'
  },
  {
    案源编号: '202410345678.9',
    技术领域: '人工智能',
    预估难度: '较高',
    标签: '跨领域|需评估',
    状态: '待确认'
  }
];

/******** 审限监控兜底数据 ********/
const DEFAULT_DEADLINES = [
  { 审限监控案号: '2024！10987654.3', 部门审限: '2024-12-20', 剩余天数: 3, 当前状态: '一通审查中', 操作按钮1: '立即处理', 操作按钮2: '申请协办' },
  { 审限监控案号: '202410876543.2', 部门审限: '2024-12-24', 剩余天数: 7, 当前状态: '待结案', 操作按钮1: '继续处理', 操作按钮2: '标记优先' }
];

/******** 协作者推荐兜底数据 ********/
const DEFAULT_HELPERS = [
  { 协作者姓名: '李同事', 备注: 'U5048', 技术领域: '计算机软件', 可协助件数: 2, 结对按钮: '申请结对' },
  { 协作者姓名: '王同事', 备注: 'U5046', 技术领域: '通信技术', 可协助件数: 1, 结对按钮: '申请结对' }
];

// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', function() {
    // 加载用户数据

	loadUserData().then(() => {
	  // 统一刷一次各页面碎片
	  if (document.getElementById('caseList')) renderCaseList();
	  if (document.getElementById('deadlineCaseList')) renderDeadlineList();
	  if (document.querySelector('#deadlinePage .task-timeline')) renderHelperList();
	  if (document.getElementById('monthPlanTimeline')) renderMonthPlan();
	});
    
    // 设置当前时间
    setCurrentTime();
    
    // 添加触摸反馈
    addTouchFeedback();
    
    // 阻止表单默认提交
    preventFormSubmit();
	
});

// 加载用户数据
function loadUserData() {
    // 优先尝试从CSV加载数据
    return fetchCSVData(); // ⬅️ 把 Promise 继续抛给上层
}

/* ========== 1. 根据登录用户决定 csv 顺序 1015本次修订========== */
function getCsvChain() {
  // 与登录页保持一致，localStorage 里存了当前用户
  const saved = localStorage.getItem('currentUser');
  if (!saved) return ['zhineng.csv'];          // 未登录时只试默认
  try {
    const { username } = JSON.parse(saved);
    if (username === '涂明珏') {
      return ['zhineng_1.csv', 'zhineng.csv']; // 王某某专属链路
    }
    if (username === '王鹤迪') {
      return ['zhineng_2.csv', 'zhineng.csv']; // 王某某专属链路
    }
    if (username === '黄思怡') {
      return ['zhineng_3.csv', 'zhineng.csv']; // 王某某专属链路
    }
  } catch (_) {}
  return ['zhineng.csv'];                      // 其他用户只走默认
}
/* ========== 2. 按顺序拉取，直到成功 1015本次修订========== */
async function fetchCSVWithFallback() {
  const chain = getCsvChain();
  for (const file of chain) {
    const url = `https://haoyunlai-12345-1342611250.cos.ap-guangzhou.myqcloud.com/${file}?t=${Date.now()}`;
    try {
      const res = await fetch(url);
      if (!res.ok) throw new Error(`${file} 状态码 ${res.status}`);
      const text = await res.text();
      console.log(`[zhineng] 成功加载 ${file}`);
      return text;                    // 只要成功就返回文本
    } catch (err) {
      console.warn(`[zhineng] 加载 ${file} 失败`, err);
    }
  }
  // 全部失败，返回 null 让后续走兜底
  return null;
}

// 从CSV获取数据
function fetchCSVData() {
  // 不再直接 fetch，而是调用新链路 1015本次修订
  return fetchCSVWithFallback().then(text => {
    if (text === null) throw new Error('所有 csv 均不可用');
            /* 1. 用户基本信息 */
            const lines = text.trim().split(/\n|\r\n/);
            const data = {};
            lines.forEach(line => {
                const [key, value] = line.split(',');
                if (key && value) data[key.trim()] = value.trim();
            });

            /* 2. 月度规划：只拿“月份,孕周区间,一通量,结案量”标题以下的连续数据行 */
			const planStart = text.split(/\r?\n/).findIndex(l => l.startsWith('月份,'));
			window.monthPlan = [];
			if (planStart !== -1) {
			  for (let i = planStart + 1; i < lines.length; i++) {
				const l = lines[i].trim();
				// 遇到空行或下一个“【”段落就结束
				if (l === '' || l.startsWith('【')) break;
				const [month, weeks, first, close] = l.split(',').map(s => s.trim());
				if (weeks && first != null && close != null) {
				  window.monthPlan.push({
					month: parseInt(month) || window.monthPlan.length + 1,
					weeks,
					first:  parseInt(first)  || 0,
					close:  parseInt(close) || 0
				  });
				}
			  }
			}
			/* 如果 CSV 里没有解析到任何月份，再用兜底数据 */
			if (window.monthPlan.length === 0) window.monthPlan = DEFAULT_PLAN;

			/* 3. 案源推送：只拿“案源编号”到下一个“*****”之间的行  */
			const allLines = text.split(/\r?\n/);
			const startIdx = allLines.findIndex(l => l.startsWith('案源编号'));
			if (startIdx === -1) return;          // 没找到案源头
			let endIdx = allLines.findIndex((l, i) => i > startIdx && l.startsWith('【审限监控数据】'));
			if (endIdx === -1) endIdx = allLines.length;   // 后面再无分段符

			const caseLines = allLines.slice(startIdx + 1, endIdx).filter(l => l.includes(','));
			window.caseList = [];                 // 先清空，防止累积
			caseLines.forEach(l => {
				const [id, field, diff, time, tags, status] = l.split(',').map(s => s.trim());
				if (id && field) {
					window.caseList.push({
						案源编号: id,
						技术领域: field,
						预估难度: diff,
						标签: tags,
						状态: status
					});
				}
			});
			/* 如果 CSV 没有案源，再用兜底数据 */
			if (window.caseList.length === 0) window.caseList = DEFAULT_CASES;

			
			/* 4-1 审限监控  与  4-2 协作者推荐  统一分段解析 */
            const wholeText = text; // 原始文本
            /* 按分段符切成大段 */
            const deadlineSection = extractSection(wholeText, '【审限监控数据】');
            const helperSection   = extractSection(wholeText, '【协作者推荐】');

            window.deadlineList = parseSection(deadlineSection, [
                '审限监控案号', '部门审限', '剩余天数', '当前状态', '操作按钮1', '操作按钮2'
            ], (row) => ({
                审限监控案号: row[0],
                部门审限:     row[1],
                剩余天数:     Number(row[2]) || 0,
                当前状态:     row[3],
                操作按钮1:    row[4],
                操作按钮2:    row[5]
            })) || DEFAULT_DEADLINES;

            window.helperList   = parseSection(helperSection, [
                '协作者姓名', '备注', '技术领域', '可协助件数', '结对按钮'
            ], (row) => ({
                协作者姓名: row[0],
                备注:       row[1],
                技术领域:   row[2],
                可协助件数: row[3],
                结对按钮:   row[4]
            })) || DEFAULT_HELPERS;
			if (window.deadlineList.length === 0) window.deadlineList = DEFAULT_DEADLINES;
			if (window.helperList.length === 0) window.helperList = DEFAULT_HELPERS;		
						
            /* 5、 统一刷新界面 */
            updateUserInfo(data);
            window.currentMonth = inferMonthFromStatus(data['当前状态'] || '');
            
			/* === 新增：第一次加载就把数量写进去 === */
			const caseCountNode = document.getElementById('caseCountTxt');
			if (caseCountNode) {
			  caseCountNode.textContent = `已为您筛选出${window.caseList.length}件适合的案件`;
			}
			
			if (document.getElementById('monthPlanTimeline')) renderMonthPlan();
            if (document.getElementById('caseList'))           renderCaseList();
        })
        .catch(error => {
			console.error('CSV数据加载失败，使用默认数据:', error);
			// 用户基本信息
			if (userData?.[0]) updateUserInfo(userData[0]);
			// 案源/月度/审限/协作者 一起用兜底
			window.caseList     = DEFAULT_CASES;
			window.monthPlan    = DEFAULT_PLAN;
			window.deadlineList = DEFAULT_DEADLINES;
			window.helperList   = DEFAULT_HELPERS;
			window.currentMonth = 6;

			// 关键：立刻渲染，不再等 30s
			if (document.getElementById('deadlinePage').classList.contains('active')) {
				renderDeadlineList();
				renderHelperList();
			}
			if (document.getElementById('casePage').classList.contains('active')) renderCaseList();
		});
}

// 更新用户信息
function updateUserInfo(data) {
    
	console.log('🔥 updateUserInfo 被调用，数据:', data);
	// 更新用户基本信息
    if (data['用户名']) {
        document.getElementById('userName').textContent = data['用户名'];
    }
    if (data['职位'] && data['部门']) {
        document.getElementById('userPosition').textContent = `${data['职位']} · ${data['部门']}`;
    }
    if (data['当前状态']) {
        document.getElementById('pregnancyStatus').textContent = data['当前状态'];
    }
    if (data['预产期']) {
        document.getElementById('dueDate').textContent = data['预产期'];
    }
    if (data['怀孕开始']) {
        document.getElementById('maternityLeave').textContent = data['怀孕开始'];
    }
    
    // 更新任务统计
    if (data['一通建议数']) {
        document.getElementById('firstSuggested').textContent = data['一通建议数'];
    }
    if (data['一通已完成']) {
        document.getElementById('firstCompleted').textContent = data['一通已完成'];
    }
    if (data['一通待完成']) {
        document.getElementById('firstPending').textContent = data['一通待完成'];
    }
    if (data['结案建议数']) {
        document.getElementById('closeSuggested').textContent = data['结案建议数'];
    }
    if (data['结案已完成']) {
        document.getElementById('closeCompleted').textContent = data['结案已完成'];
    }
    if (data['结案待完成']) {
        document.getElementById('closePending').textContent = data['结案待完成'];
    }
	
	  if (data['当前状态']) {
		const status = data['当前状态'];
		document.getElementById('pregnancyStatus').textContent = status;
		// 关键：实时刷新时间轴
		renderPregnancyTimeline(status);
	  }	
	  

}

// 设置当前时间
function setCurrentTime() {
    const now = new Date();
    const year = now.getFullYear();
    const month = String(now.getMonth() + 1).padStart(2, '0');
    const day = String(now.getDate()).padStart(2, '0');
    const hours = String(now.getHours()).padStart(2, '0');
    const minutes = String(now.getMinutes()).padStart(2, '0');
    
    const currentDateTime = `${year}-${month}-${day}T${hours}:${minutes}`;
    
    // 更新所有datetime-local输入框
    const dateTimeInputs = document.querySelectorAll('input[type="datetime-local"]');
    dateTimeInputs.forEach(input => {
        if (input.value === '') {
            input.value = currentDateTime;
        }
    });
}

// 添加触摸反馈
function addTouchFeedback() {
    const cards = document.querySelectorAll('.module-card, .case-item, .btn');
    cards.forEach(card => {
        card.addEventListener('touchstart', function() {
            this.style.transform = 'scale(0.98)';
        });
        
        card.addEventListener('touchend', function() {
            this.style.transform = '';
        });
    });
}

// 阻止表单默认提交
function preventFormSubmit() {
    document.querySelectorAll('form').forEach(form => {
        form.addEventListener('submit', function(e) {
            e.preventDefault();
            alert('申请已提交，请等待审批');
        });
    });
}

// 页面切换功能
function showPage(pageId) {
    // 隐藏所有页面
    document.querySelectorAll('.page').forEach(page => {
        page.classList.remove('active');
    });

    // 显示目标页面
    const targetPage = document.getElementById(pageId);
    if (targetPage) {
        targetPage.classList.add('active');
    }

    // 滚动到顶部
    window.scrollTo(0, 0);

    /* =====  各页面临时渲染钩子 ===== */
    if (pageId === 'casePage') renderCaseList();      // 案源推送
    if (pageId === 'taskPage') renderPregnancyTimeline(document.getElementById('pregnancyStatus').textContent);
	
	/* ******* 审限监控：立即渲染，不再额外拉 CSV ******* */
	if (pageId === 'deadlinePage') {
	  loadUserData().then(() => {
		renderDeadlineList();
		renderHelperList();
	  });
	}

	if (pageId === 'casePage') {
    /* 替换“已为您筛选出 x 件适合孕产期的案件” */
    const alertP = document.querySelector('#casePage .alert-content p');
    if (alertP) alertP.textContent = `已为您筛选出 ${window.caseList.length} 件适合孕产期的案件`;

    renderCaseList();
    }
	
}

// 模拟数据更新
function updateStats() {
  console.log('刷新 CSV 数据');
  fetchCSVData();          // 已经包含 deadlineList & helperList 的重新赋值
  if (document.getElementById('deadlinePage').classList.contains('active')) {
    renderDeadlineList();
    renderHelperList();
  }
}

// 定期更新数据
setInterval(updateStats, 30000); // 每30秒更新一次



// 根据当前状态生成时间轴并高亮
function renderPregnancyTimeline(currentText = '') {
  const container = document.getElementById('pregnancyTimeline');
  if (!container) return;   // 页面未打开时直接返回

  // 把“孕中期 (24周)” 拆成 key
  const currKey = currentText.replace(/\s*\(.+?\)/, ''); // 去掉括号及周数

  container.innerHTML = ''; // 清空旧节点
  PREG_STAGES.forEach(st => {
    const item = document.createElement('div');
    item.className = 'timeline-item' + (st.key === currKey ? ' active' : '');
    item.innerHTML = `
      <div class="timeline-dot"></div>
      <div class="timeline-content">
        <h4>${st.key} <small style="color:#888;font-weight:normal">${st.weeks}</small></h4>
        <p>${st.task}</p>
      </div>`;
    container.appendChild(item);
  });
}



/******** 根据“当前状态”换算当前月份 ********/
function inferMonthFromStatus(status = '') {
  if (status.includes('早期')) return 1 + Math.floor((parseInt(status.match(/\d+/)?.[0] || 1) - 1) / 4);
  if (status.includes('中期')) return 4 + Math.floor((parseInt(status.match(/\d+/)?.[0] || 13) - 13) / 4);
  if (status.includes('晚期')) return 8 + Math.floor((parseInt(status.match(/\d+/)?.[0] || 28) - 28) / 4);
  if (status.includes('产假')) return 11;
  if (status.includes('产后')) return 13 + Math.floor((parseInt(status.match(/\d+/)?.[0] || 1) - 1) / 2);
  return 1; // 默认
}

function renderMonthPlan() {
  const box = document.getElementById('monthPlanTimeline');
  if (!box) return;
  box.innerHTML = '';
  window.monthPlan.forEach((m, idx) => {
    const item = document.createElement('div');
    item.className = 'timeline-item' + (m.month === window.currentMonth ? ' active' : '');
    item.innerHTML = `
      <div class="timeline-dot"></div>
      <div class="timeline-content">
        <h4>第 ${m.month} 月 · <small>${m.weeks}</small></h4>
        <p>一通量：<strong>${m.first}</strong> 件　结案量：<strong>${m.close}</strong> 件</p>
      </div>`;
    box.appendChild(item);
  });
}

// 渲染案源列表（纯渲染，不改动 window.caseList）
function renderCaseList() {
    const box = document.getElementById('caseList');
    if (!box) return;
    box.innerHTML = '';          // 先清空旧节点

    window.caseList.forEach(c => {
        const tags = c.标签 ? c.标签.split('|') : [];
        const item = document.createElement('div');
        item.className = 'case-item';
        item.innerHTML = `
            <div class="case-header">
                <div class="case-title">${c.案源编号}</div>
                <div class="case-status ${c.状态 === '已锁定' ? 'locked' : ''}">${c.状态}</div>
            </div>
            <div class="case-info">技术领域：${c.技术领域}</div>
            <div class="case-info">预估难度：${c.预估难度}</div>
            <div class="case-tags">
                ${tags.map(t => `<span class="tag">${t}</span>`).join('')}
            </div>`;
        box.appendChild(item);
    });
}

/******** 新增：根据审限监控数据刷新头部提醒 ********/
function refreshDeadlineAlert() {
  // 读取实时解析好的 window.deadlineList
  const cnt = (window.deadlineList || []).length;   // 表里几条就显示几条
  const alertNode = document.querySelector('#deadlinePage .alert-content p');
  if (alertNode) {
    alertNode.textContent = `您有 ${cnt} 件案件即将到达审限`;
  }
}

/******** 审限列表渲染（已包含提醒刷新） ********/
function renderDeadlineList() {
  const box = document.getElementById('deadlineCaseList');
  if (!box) return;
  box.innerHTML = '';          // 清空旧列表
  window.deadlineList.forEach(d => {
    const color = d.剩余天数 <= 3 ? '#dc3545' : '#ffc107';
    const item = document.createElement('div');
    item.className = 'case-item';
    item.style.borderLeft = `4px solid ${color}`;
    item.innerHTML = `
      <div class="case-header">
        <div class="case-title">${d.审限监控案号}</div>
        <div class="case-status" style="background:${color};color:#fff">剩${d.剩余天数}天</div>
      </div>
      <div class="case-info">部门审限：${d.部门审限}</div>
      <div class="case-info">当前状态：${d.当前状态}</div>
      <div style="margin-top:10px">
        <button class="btn" style="padding:8px 15px;font-size:14px;margin-right:10px">${d.操作按钮1}</button>
        <button class="btn btn-secondary" style="padding:8px 15px;font-size:14px">${d.操作按钮2}</button>
      </div>`;
    box.appendChild(item);
  });
  refreshDeadlineAlert();   // 🔥 列表渲染完立即刷新头部数字
}

// 渲染协作者推荐
function renderHelperList() {
  const box = document.querySelector('#deadlinePage .task-timeline');
  if (!box) return;
  // 保留 h3 标题
  const title = box.querySelector('h3');
  box.innerHTML = '';
  if (title) box.appendChild(title);
  window.helperList.forEach(h => {
    const item = document.createElement('div');
    item.className = 'timeline-item';
    item.innerHTML = `
      <div class="timeline-dot"></div>
      <div class="timeline-content">
        <h4>${h.协作者姓名} (${h.备注})</h4>
        <p>技术领域匹配 · 可协助处理${h.可协助件数}件案件</p>
        <button class="btn" style="padding:8px 15px;font-size:14px;margin-top:10px">${h.结对按钮}</button>
      </div>`;
    box.appendChild(item);
  });
}

// 根据“分段标题”提取内容
function extractSection(text, title) {
    const start = text.indexOf(title);
    if (start === -1) return '';
    // 从标题下一行开始到下一个【或文件结尾
    let end = text.indexOf('【', start + 1);
    if (end === -1) end = text.length;
    return text.slice(start + title.length, end).trim();
}

// 把一段文本按行解析成对象数组
// headers 是表头数组，mapFn 是把一行数组转换成对象的函数
function parseSection(sectionText, headers, mapFn) {
    const lines = sectionText.split(/\r?\n/).filter(l => l.trim() !== '');
    if (lines.length < 2) return null; // 没有表头+数据
    const result = [];
    // 跳过表头（第一行）
    for (let i = 1; i < lines.length; i++) {
        const row = lines[i].split(',').map(s => s.trim());
        if (row.length >= headers.length) {
            result.push(mapFn(row));
        }
    }
    return result.length ? result : null;
}

/******** 进入审限页：拉数据 + 渲染 + 刷新提醒 ********/
function enterDeadlinePage() {
  fetchCSVData()             // 已包含对 window.deadlineList 的重新解析
    .then(() => {
      renderDeadlineList();  // 内部已含 refreshDeadlineAlert()
      renderHelperList();
    })
    .catch(err => {
      console.error('审限数据刷新失败', err);
      // 兜底：用默认数据也要刷新提醒
      renderDeadlineList();
      renderHelperList();
    });
}